CloudFrontのCustom Error Responseを利用して、S3上にあるSorryページを表示する
こんにちは、ゴールデンウィークの10連休が終わってしまい、社会復帰ができていない岩本です。
さて、早速ですが
やりたい事
- CloudFrontで指定した、オリジンサーバーの障害時に、オリジンがSorryサーバーに自動的に切り替わるようにしたい。
備考
Cloudfront - オリジン
間はHTTP/HTTPSが混在しており、
クライアントからのHTTPS通信の際はCloudfront - オリジン
間の通信もHTTPS化したい。
想定した構成
問題(オリジンサーバーがS3へフェイルオーバー時)
上記の構成では、このような問題が考えられます。(オリジンへの通信はMatch Viewer
を指定する)
- HTTP通信の場合は、S3に割り当てたドメイン名
origin.hoge.com
を利用できる - HTTPS通信の場合は、S3に割り当てたドメイン名
origin.hoge.com
だと
(S3ウェブホスティングにSSL証明書は割り当てられないので)SSL証明書のエラーとなる。
Route53 を利用した上記の構成では、SSLにて問題が出ることがわかりました。
そこで、CloudFrontのCustom Error Response
を利用して、(SSL通信を維持しつつ)S3上にあるSorryページを表示させます。
やったこと
S3
- Sorry用のコンテンツを設置するバケットを作成
- バケットに
/sorry/sorry.html
を設置
CloudFront
Origins
- Sorryサーバー用のS3バケットをオリジンとして追加
Behaviors
sorry/*
を追加し、オリジンを(Sorry用の)S3バケットに指定
Error Pages
Create Custom Error Response
にて503
指定Customize Error Response
をYes
Response Page Path
を/sorry/sorry.html
HTTP Response Code
を503
に指定
実際の構成
解説
通常であれば、オリジンで発生したエラーをCloudFrontはそのままクライアントへと送信しますが、
Custom Error Response
を利用することで、エラーレスポンスのカスタマイズが行えます。
その際、Response Page Path
(エラー時に表示させるページ)を指定可能です。
ただし、外部のサーバーを指定することはできず、同一ドメイン以下のパスの指定が必要となります。
そこでSorryを表示する用のBehaviors
を作成し、オリジンをS3バケットと指定しました。
Custom Error Response
では、
400
403
404
405
414
416
500
501
502
503
504
のステータスコードの変更が可能です。
今回オリジンはELBは以下にある想定とし、ELBのステイタスチェックにてインスタンスの原因により
エラーが発生した場合には503
のレスポンスコードとなるため、Custom Error Response
にて指定をしています。
Classic Load Balancer のトラブルシューティングを行う: HTTP エラー
まとめ
この構成により、Route53のヘルスチェックも不要になり、障害時には状況に適したレスポンスコードも返せるようになります。
今日のわさび様
ゴールデンウィーク中のわさびさんのご様子です。